/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Persistencia.Oracle;

import Persistencia.Entidades.Importador;
import Persistencia.IImportadorDAO;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import oracle.jdbc.OraclePreparedStatement;
import oracle.jdbc.OracleTypes;

/**
 *
 * @author zeta
 */
public class ImportadorOracleDAO implements IImportadorDAO {

    private static ImportadorOracleDAO INSTANCE = null;

    /*
     * El contrustcor private no permite que se genere un constructor por defecto
     */
    private ImportadorOracleDAO() {
    }

    private synchronized static void createInstance() {
        if (INSTANCE == null) {
            INSTANCE = new ImportadorOracleDAO();
        }
    }

    public static ImportadorOracleDAO getInstance() {
        if (INSTANCE == null) {
            createInstance();
        }
        return INSTANCE;
    }

    public Integer insertImportador(Importador expo) {
        String sql = "INSERT INTO IMPORTADOR"
                + "(RAZON_SOCIAL,DIRECCION,LOCALIDAD,PROVINCIA,PAIS,"
                + "ABREVIADO,CUIT) VALUES(?,?,?,?,?,?,?) RETURNING ID_IMPORTADOR INTO ?";
        try {
            OraclePreparedStatement pst = (OraclePreparedStatement) OracleDAOFactory.getConnection().prepareStatement(sql);
            pst.setString(1, expo.getRazonSocial());
            pst.setString(2, expo.getDireccion());
            pst.setString(3, expo.getLocalidad());
            pst.setString(4, expo.getProvincia());
            pst.setString(5, expo.getPais());
            pst.setString(6, expo.getAbreviado());
            pst.setInt(7, expo.getCuit().intValue());
            pst.registerReturnParameter(8, OracleTypes.NUMBER);
            pst.executeUpdate();

            ResultSet rs = pst.getReturnResultSet();
            if (rs.next()) {
                return rs.getInt(1);
            }
            return null;
        } catch (SQLException ex) {
            ex.printStackTrace();
            return null;
        }
    }

    public boolean deleteImportador(Importador expo) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public boolean updateImportador(Importador expo) {
          String sql = "UPDATE IMPORTADOR SET RAZON_SOCIAL = ?,"
                    + "DIRECCION = ?,LOCALIDAD=?,PROVINCIA=?,PAIS=?,"
                    + "ABREVIADO = ?,CUIT = ? WHERE ID_IMPORTADOR = ?";
            try {
            OraclePreparedStatement pst = (OraclePreparedStatement) OracleDAOFactory.getConnection().prepareStatement(sql);
            pst.setString(1, expo.getRazonSocial());
            pst.setString(2, expo.getDireccion());
            pst.setString(3, expo.getLocalidad());
            pst.setString(4, expo.getProvincia());
            pst.setString(5, expo.getPais());
            pst.setString(6, expo.getAbreviado());
            pst.setInt(7, expo.getCuit().intValue());
            pst.setInt(8, expo.getIdImportador());
            return pst.execute();
        } catch (SQLException ex) {
            ex.printStackTrace();
            return false;
        }
    }

    public Importador getImportador(Integer idImportador) {
       String sql = "SELECT * FROM IMPORTADOR  WHERE ID_IMPORTADOR = ?";
        try {
            OraclePreparedStatement pst = (OraclePreparedStatement) OracleDAOFactory.getConnection().prepareStatement(sql);
            pst.setInt(1, idImportador.intValue());
            ResultSet rs = pst.executeQuery();
            if(rs.next()){
                Importador impo = new Importador();
                impo.setIdImportador(rs.getShort("ID_IMPORTADOR"));
                impo.setRazonSocial(rs.getString("RAZON_SOCIAL"));
                impo.setDireccion(rs.getString("DIRECCION"));
                impo.setLocalidad(rs.getString("LOCALIDAD"));
                impo.setProvincia(rs.getString("PROVINCIA"));
                impo.setPais(rs.getString("PAIS"));
                impo.setAbreviado(rs.getString("ABREVIADO"));
                impo.setCuit(rs.getLong("CUIT"));

                return impo;
            }else{
                return null;
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
            return null;
        }
    }

    public Importador getImportador(String RazonSocial) {
           String sql = "SELECT * FROM IMPORTADOR  WHERE RAZON_SOCIAL = ?";
        try {
            OraclePreparedStatement pst = (OraclePreparedStatement) OracleDAOFactory.getConnection().prepareStatement(sql);
            pst.setString(1, RazonSocial);
            ResultSet rs = pst.executeQuery();
            if(rs.next()){
                Importador impo = new Importador();
                impo.setIdImportador(rs.getShort("ID_IMPORTADOR"));
                impo.setRazonSocial(rs.getString("RAZON_SOCIAL"));
                impo.setDireccion(rs.getString("DIRECCION"));
                impo.setLocalidad(rs.getString("LOCALIDAD"));
                impo.setProvincia(rs.getString("PROVINCIA"));
                impo.setPais(rs.getString("PAIS"));
                impo.setAbreviado(rs.getString("ABREVIADO"));
                impo.setCuit(rs.getLong("CUIT"));

                return impo;
            }else{
                return null;
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
            return null;
        }
    }

    public List<Importador> getAllImportadores() {
          String sql = "SELECT * FROM IMPORTADOR";
        try {
            OraclePreparedStatement pst = (OraclePreparedStatement) OracleDAOFactory.getConnection().prepareStatement(sql);
               ResultSet rs = pst.executeQuery();
               List<Importador> lImpo = new ArrayList();
            while(rs.next()){
                Importador impo = new Importador();
                impo.setIdImportador(rs.getShort("ID_IMPORTADOR"));
                impo.setRazonSocial(rs.getString("RAZON_SOCIAL"));
                impo.setDireccion(rs.getString("DIRECCION"));
                impo.setLocalidad(rs.getString("LOCALIDAD"));
                impo.setProvincia(rs.getString("PROVINCIA"));
                impo.setPais(rs.getString("PAIS"));
                impo.setAbreviado(rs.getString("ABREVIADO"));
                impo.setCuit(rs.getLong("CUIT"));
                lImpo.add(impo);

            }
               return lImpo;
        } catch (SQLException ex) {
            ex.printStackTrace();
            return null;
        }
    }

  

    public List<Importador> selectImportadores(String condicion) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

}
